package com.huitone.smspfm.core.filter;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

import com.huitone.smspfm.logger.ExtLogger;

import com.bin.common.utils.StringUtils;
import com.huitone.smspfm.core.config.AppStaticConfigs;
import com.huitone.smspfm.dao.oracle.entity.SvrNodeDef;
import com.huitone.smspfm.model.SmsEntityForMt;


/**
 * //sendPort扩展码过滤 
 * //	一:业务系统接受上行短信,
			1,不开启短信类型检测  不清除扩展码
			2,开启短信类型检测  
			  if(判断短信类型是否接受上行短信){
			                 接受上行短信,不清除扩展码
			  }else{
			                不接受上行短信,清除扩展码
			  }
	//  二:业务系统接受上行短信  清除扩展码
 * 
 * @author wpn
 *
 */
public class SendPortFilterTask extends Thread {

	private ExtLogger logger = ExtLogger.create(SendPortFilterTask.class);
	
	private String moduleName = "扩展码过滤模块";
	
	//private byte[] moduleNameB = AppStaticConfigs.stringRedisSerializer.serialize(moduleName); 
	
	private List<SmsEntityForMt> entities = null;
	
	private CyclicBarrier barrier = null;
	
	public SendPortFilterTask(List<SmsEntityForMt> entities, CyclicBarrier barrier) {
		this.entities = entities;
		this.barrier = barrier;
	}
	

	@Override
	public void run() {
		
		if (entities == null) return;
		
		long start = System.currentTimeMillis();
		//业务配置信息表
		List<SvrNodeDef> configSvrNodeDefList =AppStaticConfigs.configSvrNodeDefList;
		//短信类型表
		Map<String,Map<String,String>> svrNodeCodeRltMap = AppStaticConfigs.svrNodeCodeRlt;
		for (SmsEntityForMt entity:entities) {
			
//			String seqNum = StringUtils.toString(entity.getSerialno()) + ":" + StringUtils.toString(entity.getPhoneNumber());
			
			String srvNode = StringUtils.toString(entity.getSrvNode());
			String serviceCode = StringUtils.toString(entity.getServiceCode());
			
			 for (SvrNodeDef def:configSvrNodeDefList) {
//				System.out.println("业务配置表 == "+def.getSvrNode());
				 if(srvNode.equals(def.getSvrNode())) {
					 //业务系统接收上行短信，0：是，1：否，2：系统强制关闭接收	
					 if("1".equals(def.getAccept_MO()) || "2".equals(def.getAccept_MO())) {
						 //去掉扩展码
						 entity.setSendPort("");
						 logger.debug("[序列号:用户号码][" + entity.getSerialno() + ":" + entity.getPhoneNumber() + "]被扩展码过滤器捕获,附加内容完成。");
					 }else if("0".equals(def.getAccept_MO())) {// //接受上行短信的业务系统
						
						 if("0".equals(def.getSmTypeCheck())) {//开启短信类型检测:0 :是，1否
							//开启检测,
							 if(svrNodeCodeRltMap.containsKey(srvNode)){ //短信类型表有没有存在srvNode业务系统对应的短信类型
								 //有,再判断短信类型是否接受上行短信
								 Map<String, String> map = svrNodeCodeRltMap.get(srvNode);
								 Set<String> keySet = map.keySet();
								 boolean contains = keySet.contains(serviceCode);
								 if(contains) {
									 String acceptMo= map.get(serviceCode);
									 if("1".equals(acceptMo)) {//短信类型是否接受上行短信，0：是，1：否
										 //去掉扩展码
										 entity.setSendPort("");
										 logger.debug("[序列号:用户号码][" + entity.getSerialno() + ":" + entity.getPhoneNumber() + "]被扩展码过滤器捕获,附加内容完成。");
									 }
								 }
							 }
						 }else{
							 //不开启短信类型检测  不清除扩展码
							 System.out.println("不清除扩展码  == def.getSmTypeCheck() = "+def.getSmTypeCheck() );
						 }
					 }
				 }
			 }
		}
		
		long end = System.currentTimeMillis();
		
		logger.debug("扩展码过滤执行完毕,共耗时:" + (end - start) + "毫秒");
		
		try {
			barrier.await();
		} catch (InterruptedException | BrokenBarrierException e) {
			e.printStackTrace();
		}
	}

}
